// Test cases for SearchResult description match highlighter
-const JsUnit = imports.jsUnit;
import Pango from 'gi://Pango';
import 'resource:///org/gnome/shell/ui/environment.js';
-import * as Util from 'resource:///org/gnome/shell/misc/util.js';
+import {Highlighter} from 'resource:///org/gnome/shell/misc/util.js';
-const tests = [
- {
- input: 'abc cba',
- terms: null,
- output: 'abc cba',
- },
- {
- input: 'abc cba',
- terms: [],
- output: 'abc cba',
- },
- {
- input: 'abc cba',
- terms: [''],
- output: 'abc cba',
- },
- {
- input: 'abc cba',
- terms: ['a'],
- output: '<b>a</b>bc cb<b>a</b>',
- },
- {
- input: 'abc cba',
- terms: ['a', 'a'],
- output: '<b>a</b>bc cb<b>a</b>',
- },
- {
- input: 'CaSe InSenSiTiVe',
- terms: ['cas', 'sens'],
- output: '<b>CaS</b>e In<b>SenS</b>iTiVe',
- },
- {
- input: 'This contains the < character',
- terms: null,
- output: 'This contains the < character',
- },
- {
- input: 'Don\'t',
- terms: ['t'],
- output: 'Don'<b>t</b>',
- },
- {
- input: 'Don\'t',
- terms: ['n\'t'],
- output: 'Do<b>n't</b>',
- },
- {
- input: 'Don\'t',
- terms: ['o', 't'],
- output: 'D<b>o</b>n'<b>t</b>',
- },
- {
- input: 'salt&pepper',
- terms: ['salt'],
- output: '<b>salt</b>&pepper',
- },
- {
- input: 'salt&pepper',
- terms: ['salt', 'alt'],
- output: '<b>salt</b>&pepper',
- },
- {
- input: 'salt&pepper',
- terms: ['pepper'],
- output: 'salt&<b>pepper</b>',
- },
- {
- input: 'salt&pepper',
- terms: ['salt', 'pepper'],
- output: '<b>salt</b>&<b>pepper</b>',
- },
- {
- input: 'salt&pepper',
- terms: ['t', 'p'],
- output: 'sal<b>t</b>&<b>p</b>e<b>p</b><b>p</b>er',
- },
- {
- input: 'salt&pepper',
- terms: ['t', '&', 'p'],
- output: 'sal<b>t</b><b>&</b><b>p</b>e<b>p</b><b>p</b>er',
- },
- {
- input: 'salt&pepper',
- terms: ['e'],
- output: 'salt&p<b>e</b>pp<b>e</b>r',
- },
- {
- input: 'salt&pepper',
- terms: ['&a', '&am', '&', '&'],
- output: 'salt&pepper',
- },
- {
- input: '&&&&&',
- terms: ['a'],
- output: '&&&&&',
- },
- {
- input: '&;&;&;&;&;',
- terms: ['a'],
- output: '&;&;&;&;&;',
- },
- {
- input: '&;&;&;&;&;',
- terms: [';'],
- output: '&<b>;</b>&<b>;</b>&<b>;</b>&<b>;</b>&<b>;</b>',
- },
- {
- input: '&',
- terms: ['a'],
- output: '&<b>a</b>mp;',
- },
-];
+describe('Highlighter', () => {
+ const tests = [
+ {
+ input: 'abc cba',
+ terms: null,
+ output: 'abc cba',
+ },
+ {
+ input: 'abc cba',
+ terms: [],
+ output: 'abc cba',
+ },
+ {
+ input: 'abc cba',
+ terms: [''],
+ output: 'abc cba',
+ },
+ {
+ input: 'abc cba',
+ terms: ['a'],
+ output: '<b>a</b>bc cb<b>a</b>',
+ },
+ {
+ input: 'abc cba',
+ terms: ['a', 'a'],
+ output: '<b>a</b>bc cb<b>a</b>',
+ },
+ {
+ input: 'CaSe InSenSiTiVe',
+ terms: ['cas', 'sens'],
+ output: '<b>CaS</b>e In<b>SenS</b>iTiVe',
+ },
+ {
+ input: 'This contains the < character',
+ terms: null,
+ output: 'This contains the < character',
+ },
+ {
+ input: 'Don\'t',
+ terms: ['t'],
+ output: 'Don'<b>t</b>',
+ },
+ {
+ input: 'Don\'t',
+ terms: ['n\'t'],
+ output: 'Do<b>n't</b>',
+ },
+ {
+ input: 'Don\'t',
+ terms: ['o', 't'],
+ output: 'D<b>o</b>n'<b>t</b>',
+ },
+ {
+ input: 'salt&pepper',
+ terms: ['salt'],
+ output: '<b>salt</b>&pepper',
+ },
+ {
+ input: 'salt&pepper',
+ terms: ['salt', 'alt'],
+ output: '<b>salt</b>&pepper',
+ },
+ {
+ input: 'salt&pepper',
+ terms: ['pepper'],
+ output: 'salt&<b>pepper</b>',
+ },
+ {
+ input: 'salt&pepper',
+ terms: ['salt', 'pepper'],
+ output: '<b>salt</b>&<b>pepper</b>',
+ },
+ {
+ input: 'salt&pepper',
+ terms: ['t', 'p'],
+ output: 'sal<b>t</b>&<b>p</b>e<b>p</b><b>p</b>er',
+ },
+ {
+ input: 'salt&pepper',
+ terms: ['t', '&', 'p'],
+ output: 'sal<b>t</b><b>&</b><b>p</b>e<b>p</b><b>p</b>er',
+ },
+ {
+ input: 'salt&pepper',
+ terms: ['e'],
+ output: 'salt&p<b>e</b>pp<b>e</b>r',
+ },
+ {
+ input: 'salt&pepper',
+ terms: ['&a', '&am', '&', '&'],
+ output: 'salt&pepper',
+ },
+ {
+ input: '&&&&&',
+ terms: ['a'],
+ output: '&&&&&',
+ },
+ {
+ input: '&;&;&;&;&;',
+ terms: ['a'],
+ output: '&;&;&;&;&;',
+ },
+ {
+ input: '&;&;&;&;&;',
+ terms: [';'],
+ output: '&<b>;</b>&<b>;</b>&<b>;</b>&<b>;</b>&<b>;</b>',
+ },
+ {
+ input: '&',
+ terms: ['a'],
+ output: '&<b>a</b>mp;',
+ },
+ ];
-try {
- for (let i = 0; i < tests.length; i++) {
- let highlighter = new Util.Highlighter(tests[i].terms);
- let output = highlighter.highlight(tests[i].input);
+ for (const test of tests) {
+ const {terms, input, output: expected} = test;
- JsUnit.assertEquals(`Test ${i + 1} highlight ` +
- `"${tests[i].terms}" in "${tests[i].input}"`,
- output, tests[i].output);
+ it(`highlights ${JSON.stringify(terms)} in "${input}"`, () => {
+ const highlighter = new Highlighter(terms);
+ const output = highlighter.highlight(input);
- let parsed = false;
- try {
- Pango.parse_markup(output, -1, '');
- parsed = true;
- } catch (e) {}
- JsUnit.assertEquals(`Test ${i + 1} is valid markup`, true, parsed);
+ expect(output).toEqual(expected);
+ expect(() => Pango.parse_markup(output, -1, '')).not.toThrow();
+ });
}
-} catch (e) {
- if (typeof e.isJsUnitException != 'undefined' &&
- e.isJsUnitException) {
- if (e.comment)
- log(`Error in: ${e.comment}`);
- }
- throw e;
-}
+});